package com.company.aicrawlers.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.company.aicrawlers.common.dto.PageResponse;
import com.company.aicrawlers.entity.Question;
import org.springframework.web.multipart.MultipartFile;

import java.util.List;

/**
 * 问句服务接口
 *
 * @author AI Crawlers Team
 * @date 2025-10-10
 */
public interface QuestionService extends IService<Question> {
    
    /**
     * 分页查询问句列表
     *
     * @param page 页码
     * @param size 每页大小
     * @param keyword 搜索关键词
     * @param category 问句类别
     * @param status 状态
     * @return 分页数据
     */
    PageResponse<Question> getPageList(Integer page, Integer size, String keyword, String category, Integer status);
    
    /**
     * 分页查询问句列表（增强版，支持按产品/类别筛选）
     *
     * @param page 页码
     * @param size 每页大小
     * @param keyword 搜索关键词
     * @param category 问句类别
     * @param productId 产品ID（筛选关联该产品的问句）
     * @param productCategoryId 产品类别ID（筛选关联该类别的问句）
     * @param status 状态
     * @return 分页数据
     */
    PageResponse<Question> getPageListEnhanced(Integer page, Integer size, String keyword, String category, 
                                               Long productId, Long productCategoryId, Integer status);
    
    /**
     * 根据ID获取问句详情
     *
     * @param questionId 问句ID
     * @return 问句对象
     */
    Question getById(Long questionId);
    
    /**
     * 创建问句
     *
     * @param question 问句对象
     * @return 问句ID
     */
    Long create(Question question);
    
    /**
     * 更新问句
     *
     * @param question 问句对象
     */
    void update(Question question);
    
    /**
     * 删除问句
     *
     * @param questionId 问句ID
     */
    void delete(Long questionId);
    
    /**
     * 批量删除问句
     *
     * @param questionIds 问句ID列表
     */
    void batchDelete(List<Long> questionIds);
    
    /**
     * 批量导入问句（Excel）
     *
     * @param file Excel文件
     * @return 导入数量
     */
    Integer batchImport(MultipartFile file);
    
    /**
     * 获取所有问句类别
     *
     * @return 类别列表
     */
    List<String> getAllCategories();
}

